package com.bnd.controller;

import com.bnd.common.BaseResponse;
import com.bnd.common.ErrorCode;
import com.bnd.common.ResultUtils;
import com.bnd.common.exception.BusinessException;
import com.bnd.service.ImageService;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * AI 文生图 控制器
 */
@RestController
@RequestMapping("/ai/image")
@Slf4j
@Validated
@RequiredArgsConstructor
public class AiImageController {

    private final ImageService imageService;

    // 使用显式构造器进行依赖注入，避免部分环境下lombok未生成构造器导致编译错误

    /**
     * 文本生成图片
     * @param req 生成请求参数
     * @return 生成的图片URL列表
     */
    @PostMapping("/generate")
    public BaseResponse<List<String>> generate(@RequestBody GenerateReq req) {
        if (req == null) {
            throw new BusinessException(ErrorCode.PARAMS_NULL);
        }
        List<String> urls = imageService.textToImage(req.getPrompt(), req.getSize(), req.getN());
        return ResultUtils.success(urls);
    }

    /**
     * 图片生成请求参数
     */
    @Data
    public static class GenerateReq {
        /** 提示词（必填） */
        @NotBlank(message = "prompt不能为空")
        private String prompt;

        /** 图片尺寸（可选），如：1024*1024、1664*928 */
        private String size;

        /** 数量（可选），默认1，最大4 */
        @Min(1)
        @Max(4)
        private Integer n = 1;
    }
}


